/*
 * @Author: 一路向阳 tt_sunzhenfeng@163.com
 * @Date: 2024-05-24 14:08:15
 * @LastEditors: 一路向阳 tt_sunzhenfeng@163.com
 * @LastEditTime: 2024-05-30 13:45:44
 * @FilePath: \vue3_nuxt_demo\server\api\upload\cos.post.ts
 * @Description: 腾讯云上传接口
 */
import COS from 'cos-nodejs-sdk-v5';
import { responseJson, getLoginUid } from '@/server/utils/helper';

/**
 * 1、判断用户是否登录
 * 2、上传文件到腾讯云
 */

export default defineEventHandler(
  async (event) => {

    //获取用户id，判断是否登录
    const uid = getLoginUid(event);

    // 判断用户id 是否存在
    if (uid === 0) {
      setResponseStatus(event, 401);
      return responseJson(401,{
        success: false,
        msg: '请先登录'
      });
    }

    // 获取请求体
    const body = await readMultipartFormData(event);

    if (body) {

      if (body[0]?.type !== 'image/jpeg' && body[0]?.type !== 'image/png' && body[0]?.type !== 'image/jpg') {
        return responseJson(200,{
          success: false,
          msg: '请上传jpg/png/jpeg类型的图片'
        });
      }

      const config = useRuntimeConfig();

      const cos = new COS({
        // 推荐使用环境变量获取；用户的 SecretId，建议使用子账号密钥，授权遵循最小权限指引，降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
        SecretId: config.SecretId,
        // 推荐使用环境变量获取；用户的 SecretKey，建议使用子账号密钥，授权遵循最小权限指引，降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
        SecretKey: config.SecretKey
      });

      //图片名称
      const fileName = Date.now()+'-'+body[0].filename
      //图片数据
      const buffer = body[0].data;
      //请求文件
      const data = await cos.putObject({
        // 必须
        Bucket: config.public.BUCKET, 
        // 必须
        Region: config.public.REGION,
        // 必须
        Key: fileName,
        // 上传文件对象
        Body: buffer
      })
      
      const url = `https://${data.Location}`;

      return  responseJson(200,{
        success: true,
        msg: '上传成功',
        url
      });
    }
    
    return  responseJson(400,{
      success: false,
      msg: '请上传头像'
    })
  }
);